import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Pie,Map,Bar,Tab,Line,Map,Timeline,Grid,Scatter
df=pd.read_csv("suiciderate5.csv")
df
def timeline_map() -> Timeline:
tl = Timeline()
for i in range(2000, 2018):
tl.add_schema(orient= "horizontal",
axis_type="category", symbol='none',play_interval= 3,is_auto_play= False,
)
map0 = (
Map()
.add(
"Country",list(zip(list(df.Entity),list(df["{}".format(i)]))), "world",is_map_symbol_show =False,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="{}年全球自杀死亡率数据".format(i)),
visualmap_opts=opts.VisualMapOpts(max_=40),
)
)
tl.add(map0, "{}年".format(i))
return tl
timeline_map().render_notebook()
从整体上可以看出,北半球国家的自杀率普遍高于南半球,赤道以外自杀率递增,原因或许跟阳光日照有关,太阳辐射从赤道向两极递减,越是少能见到阳光的国家,自杀率越是高,而同时纬度越高的国家,自杀率也越高,这里猜想跟气候温度有关,平均温度越高的国家,自杀率越是高。
df1=pd.read_csv('sun.csv')
df1
pde=list(zip(list(df1.Entity),(df1['2017'])))
def world() -> Map:
c = (
Map()
.add("entity", pde, "world",is_map_symbol_show =False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="各国日照时长率"),
visualmap_opts=opts.VisualMapOpts(max_=80,min_=0.1),
)
)
return c
各国日照时长=world()
各国日照时长.render_notebook()
这里可以看出,日照率随着赤道向两极递减,与全球自杀率基本一致,可以验证我的猜想。比较经典的是北欧国家格林兰岛,格林兰岛的自杀率常年居于世界第一,这与格林兰岛每年的极昼极夜能关联上,同时格林兰岛是最靠近北极的岛屿,在最漫长的极夜里,无法吸取阳光日照,同时冬夜平均气温低于零下40度,是仅次于南极洲的第二个“寒极”,这与格林兰岛极居高不下的自杀率关系甚大。
分成年龄段为0-14岁/15-49岁/50-69岁/70岁以上来分析自杀率
df1=pd.read_csv("compare.csv",encoding="gbk")
df1
def timeline_pie() -> Timeline:
tl = Timeline()
for i in range(1990, 2018):
tl.add_schema(orient= "horizontal",
axis_type="category", symbol='none',play_interval=18,is_auto_play= False,
)
pie = (
Pie()
.add(
"自杀率年龄分层",
list(zip(list(df1.Year),list(df1["{}".format(i)]))),
)
.set_colors(["black", "darkblue", "orange", "purple", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts("{}年自杀率年龄分布".format(i)))
)
tl.add(pie, "{}年".format(i))
return tl
timeline_pie().render_notebook()
在人们普遍认知中,自杀一般大多发生在情感、职业发展或者生活突然变化的年轻人身上,,但可视化数据显示,1990-2017年,15-49这个跨越近35岁的年龄阶段,所占到的自杀率高只有全年龄段的四分之一左右,而50-69岁几乎20岁的跨度却也占到了全年龄段的四分之一,而占了全年龄段自杀率二分之一的竟是70岁以上的老年人,并且随着年份推移,70岁以上年龄层的自杀率还有不断上升的可能,造成全球老年人自杀率居高的原因或许在于躯体疾病增多;退休后角色转变,出现抑郁、焦虑等精神问题;老伴或亲友去世,生活孤独;经济因素。
通过全球近20年的性别自杀率分析
import pandas as pd
import plotly as py
df2=pd.read_csv("suicidebysex.csv",encoding="gbk")
dfc = df2.set_index("sex")
dfc.head()
import plotly as py
import plotly.graph_objs as go
male = go.Scatter(
x=[pd.to_datetime('01/01/{y}'.format(y=x), format="%m/%d/%Y") for x in dfc.columns.values],
y=dfc.loc["male",:].values,
name = "男性自杀率"
)
both = go.Scatter(
x=[pd.to_datetime('01/01/{y}'.format(y=x), format="%m/%d/%Y") for x in dfc.columns.values],
y=dfc.loc["both",:].values,
name = "平均自杀率"
)
female = go.Scatter(
x=[pd.to_datetime('01/01/{y}'.format(y=x), format="%m/%d/%Y") for x in dfc.columns.values],
y=dfc.loc["female",:].values,
name = "女性自杀率"
)
layout = dict(xaxis=dict(rangeselector=dict( buttons=list([
dict(count=3,
label="3年",
step="year",
stepmode="backward"),
dict(count=5,
label="5年",
step="year",
stepmode="backward"),
dict(count=10,
label="10年",
step="year",
stepmode="backward"),
dict(step="all")
])),
rangeslider=dict(bgcolor="#70EC57"),
title='年份'
),
yaxis=dict(title='近20年性别自杀率对比'),
title="近20年性别自杀率对比"
)
abc = dict(data=[male,both,female], layout=layout)
py.offline.iplot(abc, filename = "finish.html")
从可视化表可以看出,世界男性的自杀率在平均自杀率之上,虽然这个趋势随着年份推移可以看出明显的下降,但男性的自杀率依旧是女性自杀率的2-3倍,这里的原因或许在于相比女性,男性所承担的社会责任和社会压力明显较高,家庭的角色需要承担的经济负担也更大,加之在情绪的宣泄方面又不如女性及时有效,缺乏求助行为,这或许是男性自杀率远远高于女性的原因。
import pandas as pd
import plotly as py
df3=pd.read_csv("work.csv",encoding="gbk")
dfc = df3.set_index("sex")
dfc.head()
import plotly as py
import plotly.graph_objs as go
male = go.Scatter(
x=[pd.to_datetime('01/01/{y}'.format(y=x), format="%m/%d/%Y") for x in dfc.columns.values],
y=dfc.loc["male",:].values,
name = "男性劳动参与率"
)
female = go.Scatter(
x=[pd.to_datetime('01/01/{y}'.format(y=x), format="%m/%d/%Y") for x in dfc.columns.values],
y=dfc.loc["female",:].values,
name = "女性劳动参与率"
)
layout = dict(xaxis=dict(rangeselector=dict( buttons=list([
dict(count=3,
label="3年",
step="year",
stepmode="backward"),
dict(count=5,
label="5年",
step="year",
stepmode="backward"),
dict(count=10,
label="10年",
step="year",
stepmode="backward"),
dict(step="all")
])),
rangeslider=dict(bgcolor="#70EC57"),
title='年份'
),
yaxis=dict(title='近20年性别参与劳动率对比'),
title="近20年性别参与劳动率对比"
)
abc = dict(data=[male,female], layout=layout)
py.offline.iplot(abc, filename = "4.html")
可以看出近20年来,男性的劳动参与率在不断降低,而与此同时女性的劳动参与率在稳健增高,这或许是女性事业意识的觉醒开始占领男性原本的社会工作资源造成男性工作资源占有率不断降低,虽然在整体上还是男性居于上位,但不可否认男性的工作参与率在被女性追平中,这无形增加了男性就业压力,从而增加社会压力,对于男性居高的自杀率也有相关性。
从数据看来,自杀无疑是具有群体特征的,无论是高纬度地区人民,还是老年人群体或者男性群体,自杀行为无疑成为当代社会性热点问题之一,数据可视化的目的是促进就是让人们意识到问题的所在,对于自杀问题,人们还需要数据帮助做更多事情。